/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
 // 迭代
 // 前序
 // 中 左 右
 // 右 左 中
func countNodes(root *TreeNode) int {
    ans := 0
    if root == nil {
        return ans
    }
    
    st := list.New()
    st.PushBack(root)
    for st.Len() > 0 {
        e := st.Remove(st.Back())
        if e == nil {
            st.Remove(st.Back())
            ans++
            continue
        }

        node := e.(*TreeNode)
        // 右边
        if node.Right != nil {
            st.PushBack(node.Right)
        }
        
        // 左边
        if node.Left != nil {
            st.PushBack(node.Left)
        }

        // 中
        st.PushBack(node)
        st.PushBack(nil)
    }
    return ans
}